import { observe } from "./observer/index"
import { proxy } from "../util"

/**
 * 初始化状态
 * 顺序：props > methods > data > computed > watch
 */
export function initState(vm) {
    const opts = vm.$options
    if (opts.props) {
        initProps(vm)
    }
    if (opts.methods) {
        initMethods(vm)
    }
    if (opts.data) {
        initData(vm)
    }
    if (opts.computed) {
        initComputed(vm)
    }
    if (opts.watch) {
        initWatch(vm)
    }
}

function initProps(vm) {

}

function initMethods(vm) {

}


// 初始化数据
function initData(vm) {
    let data = vm.$options.data;
    // console.log(data);
    vm._data = data = typeof data === 'function' ? data.call(vm) : data;
    // console.log(data);
    // 数据劫持方案
    // 对象Object.defineProperty
    // 数组 单独处理：拦截可以改变数组的方法进行操作

    // 用代理，从vm取属性，代理到vm_data上
    for (let key in data) {
        proxy(vm, '_data', key)
    }

    observe(data);
}

function initComputed(vm) {

}

function initWatch(vm) {

}